#ifndef LIBCELL_MESH_BOOL_H_
#define LIBCELL_MESH_BOOL_H_

#include<Algorithm/intersection_curve_of_two_surfaces.h>
#include<Algorithm/subdivision_of_polygon.h>
#include <tool/libcell_subdivision.h>


#ifdef __cplusplus
extern "C" {
#endif



//m1是要remesh的网格区域
//curve 
//mcp是m1到curve的映射
//tree2 是curve的点到返回mesh的点映射
//tree3 是返回mesh的cell到 m1的cell映射。 

//如果稳定就修改,主要对那些没有交线的cell直接返回。

Mesh* remesh_along_intersecting_curve(Node* m1,Mesh2_Crossover_Point*mcp,Mesh*curve,Int_RB_Tree* tree2,Int_RB_Tree* tree3);


//m要切割的网格
//curve相交曲线
//tree储存curve 到 m 的映射(tree是需要传入,不会修改)(curve存在孤立点，所以tree定义域不完全)
//tree0储存m到curve的映射
//tree4 储存m新建点到curve的映射

//tree3是m的cells的某个属性映射(因为切割后需要修改,所以传入,会修改tree3)


void cut_along_curve_mesh(Mesh* m,Mesh* curve,Int_RB_Tree* tree,Int_RB_Tree* tree0, Int_RB_Tree*tree4, Int_RB_Tree *tree3);


//m1是要remesh的网格区域
//curve 
//mcp是m1到curve的映射
//tree2 是curve的点到返回mesh的点映射
//tree3 是返回mesh的cell到 m1的cell映射。 

Mesh* remesh_along_intersecting_curven(Node* m1, Mesh2_Crossover_Point* mcp, 
    Mesh* curve, Int_RB_Tree* tree2, Int_RB_Tree* tree3);
#ifdef __cplusplus
}
#endif

#endif